// #include "ThreadPool.hpp"
#include "ThreadPool-Singleton.hpp"
#include "Task.hpp"
#include <memory>

int main()
{
    ThreadPool<task_t>::GetInstance();
    sleep(3);
    ThreadPool<task_t>::GetInstance();
    sleep(3);

    ThreadPool<task_t>::GetInstance();
    sleep(3);

    ThreadPool<task_t>::GetInstance();
    sleep(3);

    ThreadPool<task_t>::GetInstance();
    sleep(3);
    return 0;
}

// int main()
// {
//     srand(time(nullptr));
//     EnableScreen();
//     std::unique_ptr<ThreadPool<task_t>> tp = std::make_unique<ThreadPool<task_t>>();
//     tp->InitPool();
//     tp->Start();

//     int count = 10;
//     while(count--)
//     {
//         int t = rand() % 3;
//         tp->Enqueue(tasks[t]);
//         LOG(INFO, "enqueue a task\n");
//         sleep(1);
//     }
//     tp->Stop();
//     tp->WaitAll();
// }

// int main()
// {
//     srand(time(nullptr));
//     EnableScreen();
//     std::unique_ptr<ThreadPool<int>> tp = std::make_unique<ThreadPool<int>>();
//     tp->InitPool();
//     tp->Start();

//     int count = 10;
//     while(count--)
//     {
//         int t = rand() % 100000;
//         tp->Enqueue(t);
//         LOG(INFO, "enqueue a task, %d\n", t);
//         sleep(1);
//     }
//     tp->Stop();
//     tp->WaitAll();
// }

// int main()
// {
//     // std::unique_ptr<ThreadPool> up = std::make_unique<ThreadPool>();

//     // std::cout << GetTimeStr() << std::endl;

//     // LogMessage(__FILE__, __LINE__, __func__ , 1, DEBUG, "hello world!", 11);
//     // EnableFile();
//     EnableScreen();
//     LOG(DEBUG, "hello world, hello world\n");
//     LOG(INFO, "hello world, hello world, %d\n", 10);
//     LOG(WARNING, "hello world, hello world, %d, %s\n", 11, "hella");
//     LOG(ERROR, "hello world, hello world%d, %lf\n", 12, 3.14);
//     LOG(FATAL, "hello world, hello world%d, %lf, %s\n", 12, 3.14, "aaaaaaaaaaa");

//     return 0;
// }